package py.com.erpone.entity.dm;

import java.util.HashMap;

import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Transient;
import javax.validation.constraints.NotNull;

import org.hibernate.annotations.LazyCollection;
import org.hibernate.annotations.LazyCollectionOption;

@Entity
@NamedQueries(value={@NamedQuery(name="solicitudCotizacion.all",query="select p from SolicitudCotizacion p order by p.id"),
		@NamedQuery(name="solicitudCotizacionAdjudicados.all",query="select p from SolicitudCotizacion p where p.situacion = 'A' order by p.id")})

public class SolicitudCotizacion {
	public static final String SITUACION_ADJUDICADO = "A";
	public static final String SITUACION_FINALIZADO = "F";
	public static final String SITUACION_RECHAZADO = "R";
	private static final HashMap<String, String> listSituacion = new HashMap<String, String>();

	static
	{
		listSituacion.put("Adjudicado", "A");
		listSituacion.put("Finalizado", "F");
		listSituacion.put("Rechadazo", "R");
	}
	@Id
	@GeneratedValue
	private Long id;
	@Transient
	private String situacionExtenso;
	@ManyToOne(fetch=FetchType.EAGER)
	private SolicitudPedido solicitudPedido;
	@ManyToOne
	@LazyCollection(LazyCollectionOption.FALSE)
	private Proveedor proveedor;
	@NotNull
	private double cantidad;
	@NotNull
	private double precio;
	@NotNull
	private String situacion;

	public SolicitudCotizacion() {
		super();
		
	}
	public SolicitudCotizacion(Long id, SolicitudPedido solicitudPedido,
			Proveedor proveedor, Double cantidad, Double precio,
			String situacion) {
		super();
		this.id = id;
		this.solicitudPedido = solicitudPedido;
		this.proveedor = proveedor;
		this.cantidad = cantidad;
		this.precio = precio;
		this.situacion = situacion;
	}
	public Long getId() {
		return id;
	}
	
	public String getSituacionExtenso() {
		return situacionExtenso;
	}
	public void setSituacionExtenso(String situacionExtenso) {
		this.situacionExtenso = situacionExtenso;
	}
	public void setId(Long id) {
		this.id = id;
	}

	@Transient
	public HashMap<String, String> getListSituacion() {
		return listSituacion;
	}
	
	public SolicitudPedido getSolicitudPedido() {
		return solicitudPedido;
	}
	public void setSolicitudPedido(SolicitudPedido solicitudPedido) {
		this.solicitudPedido = solicitudPedido;
	}
	public Proveedor getProveedor() {
		return proveedor;
	}
	public void setProveedor(Proveedor proveedor) {
		this.proveedor = proveedor;
	}
	public Double getCantidad() {
		return cantidad;
	}
	public void setCantidad(Double cantidad) {
		this.cantidad = cantidad;
	}
	public Double getPrecio() {
		return precio;
	}
	public void setPrecio(Double precio) {
		this.precio = precio;
	}
	public String getSituacion() {
		return situacion;
	}
	public void setSituacion(String situacion) {
		this.situacion = situacion;
	}
	public void setCantidad(double cantidad) {
		this.cantidad = cantidad;
	}
	/*public void setPrecio(double precio) {
		this.precio = precio;
	}*/
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		long temp;
		temp = Double.doubleToLongBits(cantidad);
		result = prime * result + (int) (temp ^ (temp >>> 32));
		result = prime * result + ((id == null) ? 0 : id.hashCode());
		temp = Double.doubleToLongBits(precio);
		result = prime * result + (int) (temp ^ (temp >>> 32));
		result = prime * result
				+ ((proveedor == null) ? 0 : proveedor.hashCode());
		result = prime * result
				+ ((situacion == null) ? 0 : situacion.hashCode());
		result = prime * result
				+ ((solicitudPedido == null) ? 0 : solicitudPedido.hashCode());
		return result;
	}
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		SolicitudCotizacion other = (SolicitudCotizacion) obj;
		if (Double.doubleToLongBits(cantidad) != Double
				.doubleToLongBits(other.cantidad))
			return false;
		if (id == null) {
			if (other.id != null)
				return false;
		} else if (!id.equals(other.id))
			return false;
		if (Double.doubleToLongBits(precio) != Double
				.doubleToLongBits(other.precio))
			return false;
		if (proveedor == null) {
			if (other.proveedor != null)
				return false;
		} else if (!proveedor.equals(other.proveedor))
			return false;
		if (situacion == null) {
			if (other.situacion != null)
				return false;
		} else if (!situacion.equals(other.situacion))
			return false;
		if (solicitudPedido == null) {
			if (other.solicitudPedido != null)
				return false;
		} else if (!solicitudPedido.equals(other.solicitudPedido))
			return false;
		return true;
	}
	@Override
	public String toString() {
		return "SolicitudCotizacion [id=" + id + ", solicitudPedido="
				+ solicitudPedido + ", proveedor=" + proveedor + ", cantidad="
				+ cantidad + ", precio=" + precio + ", situacion=" + situacion
				+ "]";
	}
	
}
